package service

import (
	"errors"
	"kong-social-api/modules/user/mapper"
	"kong-social-api/modules/user/model/context"
	"kong-social-api/modules/user/model/vo"
	userUtils "kong-social-api/modules/user/utils"
	"kong-social-api/utils"
	"time"
)

type UserService struct{}

var userMapper = mapper.UserMapper{}

/**
 * @Author kong
 * @Description 根据用户ID查询用户信息
 */
func (service *UserService) GetUserInfo(id uint64) (uvo *vo.UserVo) {
	// 1: 根据用户id执行查询
	user := userMapper.GetUserByID(id)
	// 2: 把user的数据转换到uservo中返回
	userVo := vo.UserVo{}
	// 3: 把用户user复制到uservo中
	utils.CopyProperties(&userVo, user)
	// 生日如果不为nil才进行处理
	if len(user.BirthDay) > 0 {
		btime, _ := time.Parse("2006-01-02", user.BirthDay)
		// 获取星座
		userVo.Constellation = userUtils.GetZodiac(int(btime.Month()), btime.Day())
		// 获取用户生肖
		userVo.Twelve = userUtils.GetChineseZodiac(btime.Year())
	}
	// 4: 返回
	return &userVo
}

/**
 * @Author kong
 * @Description 修改用户密码
 */
func (service *UserService) UpdateUserPassword(userId uint64, password string) (bool, error) {
	// 使用新的slat更新
	slat := utils.GetUUID()
	// 获取用户唯一uuid和新密码进行加密
	return userMapper.UpdatePwd(userId, slat, utils.Md5Slat(password, slat))
}

/**
 * @Author kong
 * @Description 修改用户资料
 */
func (service *UserService) UpdateUserInfo(userId uint64, ctx context.UserInfoContext) (bool, error) {
	// 根据用户id查询当前用户信息
	user := userMapper.GetUserByID(userId)
	if user == nil {
		return false, errors.New("查无此用户！")
	}
	// 把上下文中的数据放入到数据模型中
	utils.CopyProperties(user, ctx)
	// 修改用户信息
	return userMapper.UpdateUserInfo(userId, user)
}
